// Project imports:
import 'package:palmf_hid/common/values/conf.dart';
import 'common_order_util.dart';

///读取测试结果新的返回指令 有两个版本一个是返回3条数据一个是返回4条数据
///结果数据按顺序	结果4字节（	单精度浮点数）	小数点位数1字节	正常值范围下限4字节（单精度浮点数）	正常值范围上限4字节（单精度浮点数）
///结果判断1字节（0下箭头 1上箭头 2无）	项目名称10字节（ASCII码）	结果单位9字节（ASCII码）
///ID号2字节（无符号整型数）	样本类型1字节（1：全血 2：血清/血浆 3：其它）	范围判断1字节（1小于，2大于，其它在范围内）
Future<Map<String, dynamic>> readNewTestResult(List<int> data) async {
  Map<String, dynamic> map = {};
  //结果字节高位在前反转
  double resultDouble =
      getFloatFromIntBits(intArrToHex(data.sublist(0, 4).reversed.toList()));
  map["result"] = resultDouble;
  map["saveNum"] = data.sublist(4, 5)[0];
  double referLower =
      getFloatFromIntBits(intArrToHex(data.sublist(5, 9).reversed.toList()));
  map["referLower"] = referLower.toString().trim();
  double referUpper =
      getFloatFromIntBits(intArrToHex(data.sublist(9, 13).reversed.toList()));
  map["referUpper"] = referUpper.toString().trim();
  map["project"] =
      readProject(intArrToHex(data.sublist(14, 24)).toUpperCase()).trim();
  map["resultUnit"] =
      hexToAscii(intArrToHex(data.sublist(24, 32)).toUpperCase()).trim();
  int arrow = data.sublist(13, 14)[0];
  int upLow = data.sublist(37, 38)[0];
  String resultDisplay = "";
  if (arrow == 0) {
    resultDisplay = "↓";
  } else if (arrow == 1) {
    resultDisplay = "↑";
  } else {
    if (upLow == 1) {
      resultDisplay = "<";
    } else if (upLow == 2) {
      resultDisplay = ">";
    }
  }
  map["curveVersion"] = data.sublist(45, 46)[0];
  map["curveBatchNo"] = radixToString(data.sublist(46, 57))
      .replaceAll('\u0000', "")
      .replaceAll(" ", "")
      .trim();
  map["resultDisplay"] = resultDisplay;
  //检测顺序号
  map["checkNo"] = int.parse(intArrToHex(data.sublist(34, 36)), radix: 16);
  //十进制数组转hex hex转双精度 双精度转十进制
  map["patientId"] = int.parse(hexToAscii(intArrToHex(data.sublist(60, 69))));
  map["sample"] = data.sublist(36, 37)[0];
  map["reagentIdentity"] =
      hexToAscii(intArrToHex(data.sublist(69, 75))).toString();
  return map;
}

//项目名称
readProject(String data) {
  String result = hexToAscii(data
          .replaceAll(REF, TEMP_CHAR_REF)
          .replaceAll(BT, TEMP_CHAR_BT)
          .replaceAll(SYNC_BT, TEMP_CHAR_BT)
          .replaceAll(SYNC_REF, TEMP_CHAR_REF))
      .replaceAll(" ", "")
      .replaceAll(TEMP_CHAR_REF_CN, REF_STR)
      .replaceAll(TEMP_CHAR_BT_CN, BT_STR);
  return result;
}
